package br.ita.trucocearense.server.core;

public class Rodada {
	private int posicaoJogadorDaVez = 0;
	private Carta ultimaCartaBaixada;
	private Carta maiorCarta;
	private int posicaoJogadorMaiorCarta;
	private int posicaoPrimeiroJogador;
	private Carta[] cartasMesa = new Carta[4];
	private boolean finalDaRodada = false;
	private int equipeVencedora;
	private Mesa mesa;
	private boolean empate;
	private boolean rodadaComZap = false;
	
	public void setPosicaoJogadorDaVez(int posicaoJogadorDaVez) {
		this.posicaoJogadorDaVez = posicaoJogadorDaVez;
	}

	public void incPosicaoJogadorDaVez() {
		this.posicaoJogadorDaVez = (this.posicaoJogadorDaVez+1)%4; 
	}
	
	public Rodada(Mesa mesa) {
		this.mesa = mesa;
		this.setPosicaoPrimeiroJogador(0);
		this.setPosicaoJogadorDaVez(this.getPosicaoPrimeiroJogador());
	}
	
	public Rodada(Mesa mesa,int posicaoPrimeiroJogador) {
		this.mesa = mesa;
		this.setPosicaoPrimeiroJogador(posicaoPrimeiroJogador);
		this.setPosicaoJogadorDaVez(this.getPosicaoPrimeiroJogador());
	}

	public Carta getUltimaCartaBaixada() {
		return ultimaCartaBaixada;
	}

	public int getPosicaoJogadorDaVez() {
		return posicaoJogadorDaVez;
	}
	
	private void setCartaMesa(int pos,Carta carta){
		cartasMesa[pos] = carta;
		if (carta.isZap())
			this.setRodadaComZap(true);
	}

	public void baixarCartaJogadorDaVez(Carta carta){
		this.ultimaCartaBaixada = carta;
		this.setCartaMesa(this.posicaoJogadorDaVez, carta);
		this.incPosicaoJogadorDaVez();
	}
	
	public void atualizaPlacar(){
		if (this.getPosicaoJogadorDaVez() == this.getPosicaoPrimeiroJogador()){
			this.finalDaRodada = true;
			this.decidirRodada();
			if (this.isEmpate() == false)
				this.mesa.getEquipe()[this.getEquipeVencedora()].incPontuacaoPartida();
			System.out.println("RODADA Equipe 0 -> " + this.mesa.getEquipe()[0].getPontuacaoPartida());
			System.out.println("RODADA Equipe 1 -> " + this.mesa.getEquipe()[1].getPontuacaoPartida());
			System.out.println("empate " + this.isEmpate());
			
		}
	}

	private void decidirRodada(){
		
		for(int i = 0; i < 4; i++){
			if (this.isRodadaComZap() && cartasMesa[i].isEspiao()){
				cartasMesa[i].setValorInteiro(30);
				System.out.println("ESPIAO E ZAP");
			}
			if(this.getMaiorCarta() == null || this.getMaiorCarta().getValorInteiro() < cartasMesa[i].getValorInteiro()){
				this.setMaiorCarta(this.cartasMesa[i]);
				this.setEquipeVencedora(i%2);
				this.setEmpate(false);
				this.setPosicaoJogadorMaiorCarta(i);
			}
			else
				if (this.getMaiorCarta().getValorInteiro() == cartasMesa[i].getValorInteiro() && i%2 != this.getEquipeVencedora()){
					this.setEmpate(true);
					this.setPosicaoJogadorMaiorCarta(this.getPosicaoPrimeiroJogador());
				}
			
		}
	}
	
	public boolean isFinalDaRodada() {
		return finalDaRodada;
	}

	public Carta getMaiorCarta() {
		return maiorCarta;
	}

	public void setMaiorCarta(Carta carta) {
		this.maiorCarta = carta;
	}

	public int getEquipeVencedora() {
		return equipeVencedora;
	}

	public void setEquipeVencedora(int equipeVencedora) {
		this.equipeVencedora = equipeVencedora;
	}

	public boolean isEmpate() {
		return empate;
	}

	public void setEmpate(boolean empate) {
		this.empate = empate;
	}

	public boolean isRodadaComZap() {
		return rodadaComZap;
	}

	public void setRodadaComZap(boolean rodadaComZap) {
		this.rodadaComZap = rodadaComZap;
	}

	public int getPosicaoJogadorMaiorCarta() {
		return posicaoJogadorMaiorCarta;
	}

	public void setPosicaoJogadorMaiorCarta(int posicaoJogadorMaiorCarta) {
		this.posicaoJogadorMaiorCarta = posicaoJogadorMaiorCarta;
	}

	public int getPosicaoPrimeiroJogador() {
		return posicaoPrimeiroJogador;
	}

	public void setPosicaoPrimeiroJogador(int posicaoPrimeiroJogador) {
		this.posicaoPrimeiroJogador = posicaoPrimeiroJogador;
	}

	
}
